﻿using System;
using System.Collections.Generic;

using System.Text;

namespace Rance.Battle
{
    class AI技能MGT
    {
        List<AI技能> 技能List = new List<AI技能>();

        public bool Has(string 技能)
        {
            return 技能List.Exists(s => s.Name.StartsWith(技能));
        }

        public AI技能 Get(string 技能)
        {
            return 技能List.Find(s => s.Name.StartsWith(技能));
        }

        public List<AI技能> GetBy行动点(int 行动点)
        {
            return 技能List.FindAll( s => s.行动点 == 行动点);
        }

        public AI技能MGT(List<Data技能> list, 队伍状况 队伍状况)
        {
            foreach (var item in list)
            {
                if (item.Name == "待机")
                    continue;

                if (!item.Effective)
                    continue;

                AI技能 ai技能 = new AI技能();
                ai技能.Name = item.Name;
                ai技能.行动点 = item.行动点;
                技能List.Add(ai技能);

                
                foreach (var subItem in item.目标List)
                {
                    List<角色> targetList = new List<角色>();

                    foreach (var target in subItem.连带角色List)
                    {
                        角色 角色 = 队伍状况.队伍.成员List.Find(r => r.ID == target.ID);
                                 
                        if(角色 == null)
                            角色 = 队伍状况.对手状态.队伍.成员List.Find(r => r.ID == target.ID); 

                        targetList.Add(角色);
                    }

                    if (!contains(ai技能,targetList))
                    {
                        AI技能目标 技能目标 = new AI技能目标();
                        技能目标.List = targetList;
                        ai技能.TargetList.Add(技能目标);
                    }
                }
            }
        }

        private bool contains(AI技能 ai技能, List<角色> targetList)
        {
            bool result = false;

            foreach (var 技能目标 in ai技能.TargetList)
            {
                if (技能目标.List.Count != targetList.Count)
                    continue;

                foreach (var item in targetList)
                {
                    var has = 技能目标.List.Exists(r => r.ID == item.ID);
                    if (has)
                    {
                        result = true;
                        break;
                    }
                }

                if (result)
                    break;
            }

            return result;
        }

        
    }
}
